#pragma once

// 日志是有日志级别
#define DEBUG 0
#define NORMAL 1
#define WARNING 2
#define ERROR 3
#define FATAL 4 // fatal:致命

#define LOGFILE "./threadpool.log"

#include <iostream>
#include <string>
#include <cstdarg>
#include <unistd.h>
#include <time.h>

const char *glevelMap[] = {
    "DEBUG",
    "NORMAL",
    "WARNING",
    "ERROR",
    "FATAL"};

// 日志至少有：日志等级、时间、内容  --此处加一个 支持用户自定义
void logMessage(int level, const char *format, ...)
{
    // va_list ap;
    // va_start(ap, format);
    // while (1)
    //     int x = va_arg(ap, int);
    //
    // va_end(ap);

#ifndef DEBUG_SHOW // 表示不想debug
    if (level == DEBUG)
        return;
#endif

    char stdBuffer[1024]; // 日志标准部分
    // gettimeofday() / localtime() / 时间戳

    time_t timestamp = time(nullptr);
    // struct tm *localtime = localtime(&timestamp);

    snprintf(stdBuffer, sizeof stdBuffer, "[%s]{%ld}",
             glevelMap[level], timestamp);

    char logBuffer[1024]; // 日志自定义部分
    va_list args;
    va_start(args, format);
    // vprintf(format, args);
    vsnprintf(logBuffer, sizeof logBuffer,
              format /*格式控制*/, args /*参数列表*/);
    va_end(args);

    // printf("%s %s\n", stdBuffer, logBuffer);

    FILE *fp = fopen(LOGFILE, "a");
    fprintf(fp, "%s %s\n", stdBuffer, logBuffer);
    sleep(1);
    fclose(fp);
}